package com.mall.db.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.mall.db.domain.Category;

import java.util.List;

public class CategoryJson {

    public static String getCategoryJson(List<Category> list){
        //声明json数组存储根json
        JSONArray root = new JSONArray();

        for(Category Category:list){
            if(Category.getPid()==0){//获取最顶层的菜单
                JSONObject jo = getBranchCategory(Category,list);
                root.add(jo);
            }
        }
        return root.toJSONString();
    }

    public static JSONObject getBranchCategory(Category u,List<Category> list){
        //把父菜单转换为字符串
        String pCategory = JSON.toJSONString(u);
        //把字符串转换为JsonObject;
        JSONObject pjo = JSON.parseObject(pCategory);

        pjo.put("open",true);
        //声明jsonArray数组
        JSONArray ja = new JSONArray();
        for(Category Category:list){
            if(Category.getPid() == u.getId()){
                //使用递归
                //getBranchCategory(Category,list);
                //把子菜单添加到json数组
                ja.add(Category);
            }
        }

        //添加到自定义属性children
        pjo.put("children",ja);
        return pjo;

    }


    public static String getCategoryTree(List<Category> list){
        JSONArray ja  = new JSONArray();

        JSONArray array = JSONArray.parseArray(JSON.toJSONString(list));

        JSONObject all = new JSONObject();

        //把list转换为map(JSONObject)
        for (int i=0;i<array.size();i++) {
            JSONObject json = (JSONObject)(array.get(i));
            //添加到 all 对象 类似于map
            all.put(json.getString("id"),json);

        }

        //遍历List集合
        for (int i=0;i<array.size();i++) {
            JSONObject json = (JSONObject)(array.get(i));
            //获取pid
            String pid = json.getString("pid");
            //获取pid作为key的对象
            JSONObject jo = (JSONObject) all.get(pid);
            if(jo==null){//表示json没有父元素
                ja.add(json);
            }else{
                if(jo.get("children")!=null){
                    JSONArray ch = (JSONArray)jo.get("children");
                    ch.add(json);
                    jo.put("children", ch);
                }else {
                    JSONArray ch = new JSONArray();
                    ch.add(json);
                    jo.put("children", ch);
                }
            }
        }


        return ja.toJSONString();
    }

    public static void main(String[] args) {

    }
}
